package javase.ch04;

/**
 * 静态内部类
 * DCL （ Double Check Lock ）
 */
public class SingletonDCL  {
    // 1. 私有静态变量：volatile 修饰（关键！禁止指令重排序）
    private static volatile SingletonDCL INSTANCE;

    //2.私有的构造方法
    private SingletonDCL(){};

    //双重检查锁
    public static SingletonDCL getInstance(){
        // 第一次判空：未创建实例时才进入锁区（减少锁竞争）
        if (INSTANCE==null){
            // 加锁：保证同一时间只有一个线程进入创建逻辑
            synchronized (SingletonDCL.class){
                // 第二次判空：防止多个线程等待锁后重复创建
               if(INSTANCE==null){
                   INSTANCE = new SingletonDCL();
               }
            }
        }
        return INSTANCE;
    }

}

